package com.zxy.paycenter.modules.alipay.service;

import com.zxy.paycenter.common.message.request.*;

import java.util.Properties;

/**
 * @author zxy
 */
public interface AlipayService {
    /**
     * 商户代扣服务
     *
     * @param commodityReq 商品请求model
     * @param properties   支付宝配置信息
     * @return 代扣结果
     */
    String withholdPay(CommodityReq commodityReq, Properties properties);

    /**
     * 电脑支付
     *
     * @param commodityReq 商品请求model
     * @param properties   支付宝配置信息
     * @return 支付结果
     */
    String aliPayPc(CommodityReq commodityReq, Properties properties);

    /**
     * 手机H5页面支付
     *
     * @param commodityReq 商品请求model
     * @param properties   支付宝配置信息
     * @return 支付结果
     */
    String aliPayMobile(CommodityReq commodityReq, Properties properties);

    /**
     * 二维码支付
     *
     * @param commodityReq 商品请求model
     * @param properties   支付宝配置信息
     * @return 支付结果
     */
    String aliQrCodePay(CommodityReq commodityReq, Properties properties);

    /**
     * app支付服务端
     *
     * @param commodityReq 商品请求model
     * @param properties   支付宝配置信息
     * @return 支付结果
     */
    String appServicePay(CommodityReq commodityReq, Properties properties);

    /**
     * 用户支付宝签约
     *
     * @param memberReq  用户请求model
     * @param properties 支付宝配置信息
     * @return 签约结果
     */
    String userAgreementSign(MemberReq memberReq, Properties properties);

    /**
     * 用户查询支付宝签约信息
     *
     * @param memberQueryReq 用户请求model
     * @param properties     支付宝配置信息
     * @return 签约信息
     */
    String userQueryAgreementSign(MemberQueryReq memberQueryReq, Properties properties);

    /**
     * 用户解绑支付宝签约
     *
     * @param memberQueryReq 用户请求model
     * @param properties     支付宝配置信息
     * @return 解绑响应信息
     */
    String userUnAgreementSign(MemberQueryReq memberQueryReq, Properties properties);

    /**
     * 查询支付宝交易订单信息
     *
     * @param tradeReq   查询条件model
     * @param properties 支付宝配置信息
     * @return 支付宝订单信息
     */
    String alipayTradeQuery(TradeReq tradeReq, Properties properties);

    /**
     * 支付宝退款
     *
     * @param tradeRefundReq 请求model
     * @param properties     支付宝配置信息
     * @return 退款信息
     */
    String alipayTradeRefund(TradeRefundReq tradeRefundReq, Properties properties);

    /**
     * 支付宝退款信息查询
     *
     * @param tradeRefundReq 请求model
     * @param properties     支付宝配置信息
     * @return 退款信息
     */
    String alipayTradeRefundInfo(TradeRefundReq tradeRefundReq, Properties properties);

    /**
     * 支付宝订单关闭
     *
     * @param tradeCloseReq 请求model
     * @param properties    支付宝配置信息
     * @return 订单关闭信息
     */
    String alipayTradeClose(TradeCloseReq tradeCloseReq, Properties properties);
}
